<?php
/**
 * Обрашение напрямую к хелперу
 * {helper h="helperName" a="functionName" p='stringParam' assign="returnToThisVariable"}
 *
 * @param array $params
 * @param object $smarty
 */
function smarty_function_helper($params, &$smarty)
{
	$data=null;
	if(isset($params['h'])){
		$helperName=$params['h'];
		if(isset($params['a'])){
			$helper=import('helper.'.$helperName,true);
			$helperName='Helper'.ucfirst($helperName);
			$actionName=$params['a'];
			if(is_callable(array($helperName,$actionName))){
			    if(isset($params['p'])){
			        $param=$params['p'];
			        if(is_string($param) && ((substr($param,0,1)=="{" && substr($param,-1)=="}") || (substr($param,0,1)=="[" && substr($param,-1)=="]"))){
			           $param=Core::json($param);
			           if($lastError=Core::lastError()){
			               echo '['.$lastError.']';
			               return;
			           }
			        }
			    }else{ 
			        $param=null;
			    }
				$data=call_user_func(array($helperName,$actionName),$param);
			}else{
				new CoreExeption('Не сушествует функция '.$helperName.'::'.$actionName,E_ERROR,__FILE__,__LINE__,$params);
			}
		}else{
			import('helper.'.$helperName);
			$helperName='Helper'.ucfirst($helperName);
			$data = new $helperName($params);
		}
	}else{
		new CoreExeption('Не передан контроллер. Используйте для этого ключ `h`',E_ERROR,__FILE__,__LINE__,$params);
	}
	if(isset($params['assign'])){
	   $smarty->assign($params['assign'], $data);
	}else{
	    echo $data;
	}
}
?>